//给定一个已排序的链表的头
// head ， 删除所有重复的元素，使每个元素只出现一次 。返回 已排序的链表 。
//
//
//
// 示例 1：
//
//
//输入：head = [1,1,2]
//输出：[1,2]
//
//
// 示例 2：
//
//
//输入：head = [1,1,2,3,3]
//输出：[1,2,3]
//
//
//
//
// 提示：
//
//
// 链表中节点数目在范围 [0, 300] 内
// -100 <= Node.val <= 100
// 题目数据保证链表已经按升序 排列
//
//
// Related Topics 链表 👍 1013 👎 0

package main

type ListNode struct {
	Val  int
	Next *ListNode
}

//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */

func deleteDuplicates(head *ListNode) *ListNode {
	if head == nil || head.Next == nil {
		return head
	}
	m := map[int]int{
		head.Val: 1,
	}
	pre := head
	cur := head.Next
	for cur != nil {
		val := m[cur.Val]
		if val != 1 {
			m[cur.Val] = 1
			pre.Next = cur
			pre = cur
		} else {
			pre.Next = nil
		}
		cur = cur.Next
	}
	return head
}

//leetcode submit region end(Prohibit modification and deletion)

func main() {
	node1 := ListNode{Val: 1}
	node2 := ListNode{Val: 1}
	node3 := ListNode{Val: 2}
	node4 := ListNode{Val: 3}
	node5 := ListNode{Val: 3}
	node1.Next = &node2
	node2.Next = &node3
	node3.Next = &node4
	node4.Next = &node5
	val := deleteDuplicates(&node1)
	println(val)
}
